package com.nari.interplatform.utils;

import com.nari.common.core.utils.DateUtils;
import isc.crypt.IscJcrypt;
import isc.property.IscProperties;

public class IscUtil {
    public static String signData(String body){
        //调用签名服务
        IscJcrypt Japi= new IscJcrypt();

        //获取打开加密设备的参数
        IscProperties prop = new IscProperties();
        String srvProvider =prop.iscGetProperty("strProvider");
        String srvContainer =prop.iscGetProperty("strContainer");
        int srvProvType = Integer.parseInt(prop.iscGetProperty("strProvType"));
        String strPwd = prop.iscGetProperty("password");
        //打开加密设备，在调用签名或者是验签函数之前，一定要打开设备
        int err=Japi.openDevice(srvContainer,srvProvider,srvProvType,strPwd);
        if (err != 0)
        {
            //如果返回值不等于0，则需要对错误信息进行处理
            System.out.println("错误信息="+Japi.errMsg);
        }else{
           // String strData="11111111111111111";
           // String strTime="20060417 00:00:00";
            String strTime= DateUtils.dateTimeNow(DateUtils.YYYYMMDD_HH_MM_SS);
             //取本地服务器时间，时间格式必须是"YYYYMMDD HH:MM:SS"格式
            //数字签名，"SHA1withRSA"是签名算法
            Japi.signData(body,body.length(),"SHA1withRSA",strTime,0);
            System.out.println("签名结果:\n"+Japi.strResult);
            //签名或者是验签结束后，一定要关闭设备
            Japi.closeDevice();
        }
        return Japi.strResult;
    }

    public static int verifySign(String body,String signBody){
        //调用签名服务
        IscJcrypt Japi= new IscJcrypt();

        //获取打开加密设备的参数
        IscProperties prop = new IscProperties();
        String srvProvider =prop.iscGetProperty("strProvider");
        String srvContainer =prop.iscGetProperty("strContainer");
        int srvProvType = Integer.parseInt(prop.iscGetProperty("strProvType"));
        String strPwd = prop.iscGetProperty("password");
        //打开加密设备，在调用签名或者是验签函数之前，一定要打开设备
        int err=Japi.openDevice(srvContainer,srvProvider,srvProvType,strPwd);
        if (err != 0)
        {
            //如果返回值不等于0，则需要对错误信息进行处理
            System.out.println("错误信息="+Japi.errMsg);
        }else{
            //对数字签名进行验签
            Japi.verifySign(signBody,body,body.length(),"");
            System.out.println("自验结果:"+Japi.errMsg);
         //签名或者是验签结束后，一定要关闭设备
            Japi.closeDevice();
        }
        return Japi.errCode;
    }
}
